package com.loong.android.tools;

import android.content.Context;
import android.view.Gravity;
import android.view.View;

import com.loong.android.utils.ContextUtils;

/**
 * 提示弹窗类
 */
public class Toast {
    //对齐方式-水平居中
    public final static int GRAVITY_CENTER_HORIZONTAL = Gravity.CENTER_HORIZONTAL;
    //对齐方式-垂直居中
    public final static int GRAVITY_CENTER_VERTICAL = Gravity.CENTER_VERTICAL;
    //对齐方式-顶边
    public final static int GRAVITY_TOP = Gravity.TOP;
    //对齐方式-底边
    public final static int GRAVITY_BOTTOM = Gravity.BOTTOM;
    //对齐方式-左边
    public final static int GRAVITY_LEFT = Gravity.LEFT;
    //对齐方式-右边
    public final static int GRAVITY_RIGHT = Gravity.RIGHT;

    //信息弹窗的持续时间模式：短
    public final static int DURATION_SHORT = android.widget.Toast.LENGTH_SHORT;
    //信息弹窗的持续时间模式：长
    public final static int DURATION_LONG = android.widget.Toast.LENGTH_LONG;

    public Toast(android.widget.Toast toast) {
        mToast = toast;
    }

    private android.widget.Toast mToast;

    /**
     * 返回操作的android.widget.Toast对象
     */
    public android.widget.Toast getToast() {
        return mToast;
    }

    /**
     * 创建提示弹窗
     * @param context 上下文
     * @param text 提示信息
     * @param duration 持续时间模式，可参考常量: DURATION_***
     */
    public static Toast build(Context context, String text, int duration) {
        if(context == null) return null;
        return new Toast(android.widget.Toast.makeText(context, text, duration));
    }

    /**
     * 创建提示弹窗，返回弹窗对象
     * @param context 上下文
     * @param text 提示信息
     */
    public static Toast build(Context context, String text) {
        return build(context, text, DURATION_SHORT);
    }

    /**
     * 创建提示弹窗，返回弹窗对象
     * @param text 提示信息
     */
    public static Toast build(String text) {
        return build(ContextUtils.getActivity(), text, DURATION_SHORT);
    }

    /**
     * 创建提示弹窗，返回弹窗对象
     * @param msg 提示信息
     * @param duration 持续时间模式，可参考常量: DURATION_***
     */
    public static Toast build(String msg, int duration) {
        return build(ContextUtils.getActivity(), msg, duration);
    }

    /**
     * 显示信息弹窗
     */
    public Toast show() {
        if(mToast == null) return this;
        mToast.show();
        return this;
    }

    /**
     * 取消显示信息弹窗
     */
    public Toast cancel() {
        if(mToast == null) return this;
        mToast.cancel();
        return this;
    }

    /**
     * 设置自定义的视图
     * @param view 视图数据
     */
    public Toast setView(View view) {
        if(mToast == null) return this;
        mToast.setView(view);
        return this;
    }

    /**
     * 设置提示信息
     */
    public Toast setText(String text) {
        if(mToast == null) return this;
        mToast.setText(text);
        return this;
    }

    /**
     * 设置信息弹窗的持续时间模式
     * @param duration 持续时间模式，可参考常量: DURATION_***
     */
    public Toast setDuration(int duration) {
        if(mToast == null) return this;
        mToast.setDuration(duration);
        return this;
    }

    /**
     * 设置信息弹窗的对齐方式。
     * @param gravity 对齐方式，可参考常量: GRAVITY_***，可通过位与操作，实现对齐方式的叠加效果。
     *      * 如希望对齐左上角，则可设置 GRAVITY_TOP | GRAVITY_LEFT
     * @param xOffset 水平偏移量
     * @param yOffset 垂直偏移量
     */
    public Toast setGravity(int gravity, int xOffset, int yOffset) {
        if(mToast == null) return this;
        mToast.setGravity(gravity, xOffset, yOffset);
        return this;
    }

    /**
     * 设置信息弹窗的边距
     * @param horizontalMargin 水平方向的边距，单位为px，若干是小于0-1之间的小数，则表示百分比。
     *                         如：0.5f表示边距为父布局宽度的50%。
     * @param verticalMargin 垂直方向的边距，同horizontalMargin
     */
    public Toast setMargin(float horizontalMargin, float verticalMargin) {
        if(mToast == null) return this;
        mToast.setMargin(horizontalMargin, verticalMargin);
        return this;
    }

    /**
     * 取信息弹窗的视图
     */
    public View getView() {
        if(mToast == null) return null;
        return mToast.getView();
    }

    /**
     * 取信息弹窗的水平偏移量
     */
    public int getXOffset() {
        if(mToast == null) return 0;
        return mToast.getXOffset();
    }

    /**
     * 取信息弹窗的垂直偏移量
     */
    public int getYOffset() {
        if(mToast == null) return 0;
        return mToast.getYOffset();
    }

    /**
     * 取信息弹窗显示持续时间的模式，0=短；1=长
     */
    public int getDuration() {
        if(mToast == null) return 0;
        return mToast.getDuration();
    }

    /**
     * 取信息弹窗的对齐方式
     */
    public int getGravity() {
        if(mToast == null) return 0;
        return mToast.getGravity();
    }

    /**
     * 取信息弹窗水平方向的边距
     */
    public float getHorizontalMargin() {
        if(mToast == null) return 0;
        return mToast.getHorizontalMargin();
    }

    /**
     * 取信息弹窗垂直方向的边距
     */
    public float getVerticalMargin() {
        if(mToast == null) return 0;
        return mToast.getVerticalMargin();
    }

}
